Clover coverage report - Enterprise Web Services - 1.0
Coverage timestamp: Mon May 30 2005 17:10:32 CEST
file stats: LOC: 254   Methods: 7
NCLOC: 203   Classes: 1
30 day Evaluation Version distributed via the Maven Jar Repository. Clover is not free. You have 30 days to evaluate it. Please visit http://www.thecortex.net/clover to obtain a licensed version of Clover
 
 Source file Conditionals Statements Methods TOTAL
JaxRpcMappingFileWriter.java 56.2% 73.8% 85.7% 71.2%
coverage coverage
 1   
 /*
 2   
  * Copyright 2003,2004 The Apache Software Foundation.
 3   
  * 
 4   
  * Licensed under the Apache License, Version 2.0 (the "License");
 5   
  * you may not use this file except in compliance with the License.
 6   
  * You may obtain a copy of the License at
 7   
  * 
 8   
  *      http://www.apache.org/licenses/LICENSE-2.0
 9   
  * 
 10   
  * Unless required by applicable law or agreed to in writing, software
 11   
  * distributed under the License is distributed on an "AS IS" BASIS,
 12   
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 13   
  * See the License for the specific language governing permissions and
 14   
  * limitations under the License.
 15   
  */
 16   
 package org.apache.geronimo.ews.ws4j2ee.toWs.dd;
 17   
 
 18   
 import org.apache.axis.encoding.SerializationContext;
 19   
 import org.apache.axis.wsdl.fromJava.Emitter;
 20   
 import org.apache.geronimo.ews.ws4j2ee.context.J2EEWebServiceContext;
 21   
 import org.apache.geronimo.ews.ws4j2ee.toWs.GenerationFault;
 22   
 import org.apache.geronimo.ews.ws4j2ee.toWs.UnrecoverableGenerationFault;
 23   
 import org.apache.geronimo.ews.ws4j2ee.toWs.Writer;
 24   
 import org.apache.geronimo.ews.ws4j2ee.utils.Utils;
 25   
 
 26   
 import javax.wsdl.Binding;
 27   
 import javax.wsdl.Operation;
 28   
 import javax.wsdl.Part;
 29   
 import javax.wsdl.Port;
 30   
 import javax.wsdl.Service;
 31   
 import javax.xml.namespace.QName;
 32   
 import java.io.IOException;
 33   
 import java.lang.reflect.Method;
 34   
 import java.util.HashMap;
 35   
 import java.util.Iterator;
 36   
 import java.util.Map;
 37   
 
 38   
 /**
 39   
  * @author Srinath Perera(hemapani@opensource.lk)
 40   
  */
 41   
 public class JaxRpcMappingFileWriter implements Writer {
 42   
     private SerializationContext sc;
 43   
     private String ns = "http://java.sun.com/xml/ns/j2ee";
 44   
     private Emitter emitter;
 45   
     private J2EEWebServiceContext j2eewscontext;
 46   
 
 47  11
     public JaxRpcMappingFileWriter(java.io.Writer out,
 48   
                                    Emitter emitter,
 49   
                                    J2EEWebServiceContext j2eewscontext) {
 50  11
         if (out == null) {
 51  0
             throw new UnrecoverableGenerationFault(out + " The writer is null");
 52   
         }
 53  11
         sc = new SerializationContext(out);
 54  11
         sc.setPretty(true);
 55  11
         this.emitter = emitter;
 56  11
         this.j2eewscontext = j2eewscontext;
 57   
     }
 58   
 
 59  11
     private void writePackageMapping() throws IOException {
 60  11
         String jaxrpcsei = j2eewscontext.getMiscInfo().getJaxrpcSEI();
 61  11
         Map map = emitter.getNamespaceMap();
 62  11
         String val = null;
 63  11
         if (map != null) {
 64  11
             Iterator packages = map.keySet().iterator();
 65  11
             while (packages.hasNext()) {
 66  11
                 String pkg = (String) packages.next();
 67  11
                 if (pkg == null) {
 68   
                     //TODO this is temporrary work around to make sure 
 69   
                     //the mapping is defined.
 70  0
                     String pkgName = Utils.getPackageNameFromQuallifiedName(jaxrpcsei);
 71  0
                     val = (String) map.get(pkgName);
 72  0
                     if (val == null) {
 73  0
                         val = Utils.javapkgToURI(pkgName);
 74   
                     } else {
 75  0
                         continue;
 76   
                     }
 77  11
                 } else if (pkg.equals(jaxrpcsei)) {
 78  0
                     continue;
 79   
                 } else {
 80  11
                     val = (String) map.get(pkg);
 81   
                 }
 82   
                 //TODO FIX this code to simplfy. 
 83  11
                 if (pkg != null) {
 84  11
                     sc.startElement(new QName(ns, "package-mapping"), null);//package-mapping
 85  11
                     sc.startElement(new QName(ns, "package-type"), null);
 86  11
                     sc.writeString(pkg);
 87  11
                     sc.endElement();
 88  11
                     sc.startElement(new QName(ns, "namespaceURI"), null);
 89  11
                     sc.writeString(val);
 90  11
                     sc.endElement();
 91  11
                     sc.endElement();//package-mapping                            
 92   
                 }
 93   
             }
 94   
         }
 95   
     }
 96   
 
 97  11
     public void writeServiceMapping() throws IOException {
 98  11
         Service service = j2eewscontext.getWSDLContext().gettargetService().getService();
 99  11
         sc.startElement(new QName(ns, "service-interface-mapping"), null);//service-interface-mapping   
 100  11
         String name = emitter.getCls().getName();
 101  11
         int index = name.lastIndexOf('.');
 102  11
         String packageName = "";
 103  11
         if (index > 0)
 104  11
             packageName = name.substring(0, index + 1);
 105  11
         sc.startElement(new QName(ns, "service-interface"), null);
 106  11
         sc.writeString(packageName + emitter.getServiceElementName());
 107  11
         sc.endElement();
 108  11
         sc.registerPrefixForURI("ns1", service.getQName().getNamespaceURI());
 109  11
         sc.startElement(new QName(ns, "wsdl-service-name"), null);
 110  11
         sc.writeString("ns1:" + service.getQName().getLocalPart());
 111  11
         sc.endElement();
 112   
             
 113   
         //port mapping
 114  11
         Port wsdlport = j2eewscontext.getWSDLContext().getTargetPort();
 115  11
         sc.startElement(new QName(ns, "port-mapping"), null);//port-mapping
 116  11
         sc.startElement(new QName(ns, "port-name"), null);
 117  11
         sc.writeString(wsdlport.getName());
 118  11
         sc.endElement();
 119  11
         sc.startElement(new QName(ns, "java-port-name"), null);
 120  11
         sc.writeString(emitter.getServicePortName());
 121  11
         sc.endElement();
 122  11
         sc.endElement();//port-mapping
 123  11
         sc.endElement();//service-interface-mapping       
 124   
     }
 125   
 
 126  40
     private void writeReturnTypes(HashMap methods, Operation op) throws IOException {
 127   
         //set return type
 128  40
         Method mtd = (Method) methods.get(op.getName());
 129  40
         Class ret = mtd.getReturnType();
 130  40
         if (ret != null && !("void".equals(ret.toString()))) {
 131   
             //set return type info
 132  35
             Map parts = op.getOutput().getMessage().getParts();
 133  35
             if (parts != null) {
 134  35
                 Iterator partIt = parts.values().iterator();
 135  35
                 while (partIt.hasNext()) {
 136   
                     //set wsdl message type
 137  35
                     QName messagename = op.getOutput().getMessage().getQName();
 138   
                         
 139   
                     //set wsdl message part type
 140  35
                     sc.startElement(new QName(ns, "wsdl-return-value-mapping"), null);
 141  35
                     sc.startElement(new QName(ns, "method-return-value"), null);
 142  35
                     sc.writeString(ret.getName());
 143  35
                     sc.endElement();
 144  35
                     sc.registerPrefixForURI("ns1", messagename.getNamespaceURI());
 145  35
                     sc.startElement(new QName(ns, "wsdl-message"), null);
 146  35
                     sc.writeString("ns1:" + messagename.getLocalPart());
 147  35
                     sc.endElement();
 148  35
                     sc.startElement(new QName(ns, "wsdl-message-part-name"), null);
 149  35
                     sc.writeString(((Part) partIt.next()).getName());
 150  35
                     sc.endElement();
 151  35
                     sc.endElement();//wsdl-return-value-mapping
 152   
                 }
 153   
             }
 154   
         }
 155   
     }
 156   
 
 157  0
     private void writeParametParts(HashMap methods, Operation op) throws IOException {
 158  0
         int position = 0;
 159  0
         Class[] params = ((Method) methods.get(op.getName())).getParameterTypes();
 160  0
         Iterator parmIt = null;
 161  0
         Map parameters = op.getInput().getMessage().getParts();
 162  0
         if (parameters != null) {
 163  0
             parmIt = parameters.values().iterator();
 164   
         }
 165  0
         while (parmIt != null && parmIt.hasNext()) {
 166  0
             Part part = (Part) parmIt.next();
 167  0
             sc.startElement(new QName(ns, "method-param-parts-mapping"), null);
 168   
 
 169   
             //set parameter position
 170  0
             sc.startElement(new QName(ns, "param-position"), null);
 171  0
             sc.writeString(Integer.toString(position));
 172  0
             sc.endElement();
 173   
             //set parameter java typr
 174  0
             sc.startElement(new QName(ns, "param-type"), null);
 175  0
             sc.writeString(params[position].getName());
 176  0
             sc.endElement();
 177   
                 
 178   
             //set message mapping
 179  0
             sc.startElement(new QName(ns, "wsdl-message-mapping"), null);
 180  0
             QName messagename = op.getInput().getMessage().getQName();
 181  0
             sc.registerPrefixForURI("ns1", messagename.getNamespaceURI());
 182  0
             sc.startElement(new QName(ns, "wsdl-message"), null);
 183  0
             sc.writeString(messagename.getLocalPart());
 184  0
             sc.endElement();
 185  0
             sc.startElement(new QName(ns, "wsdl-message-part-name"), null);
 186  0
             sc.writeString(part.getName());
 187  0
             sc.endElement();
 188  0
             sc.startElement(new QName(ns, "parameter-mode"), null);
 189  0
             sc.writeString("IN");
 190  0
             sc.endElement();
 191  0
             sc.endElement();//wsdl-message-mapping
 192  0
             sc.endElement();//method-param-parts-mapping
 193   
         }
 194   
     }
 195   
 
 196  11
     private void writeMethodMapping(Binding binding) throws IOException {
 197   
         //add the operation mappings
 198  11
         Iterator ops = binding.getPortType().getOperations().iterator();
 199  11
         while (ops.hasNext()) {
 200  40
             Operation op = (Operation) ops.next();
 201  40
             sc.startElement(new QName(ns, "service-endpoint-method-mapping"), null);//service-endpoint-method-mapping
 202   
 
 203   
             //set the java method name
 204  40
             sc.startElement(new QName(ns, "java-method-name"), null);
 205  40
             sc.writeString(op.getName());
 206  40
             sc.endElement();
 207  40
             sc.startElement(new QName(ns, "wsdl-operation"), null);
 208  40
             sc.writeString(op.getName());
 209  40
             sc.endElement();
 210  40
             HashMap methods = new HashMap();
 211  40
             Method[] javamethods = emitter.getCls().getMethods();
 212  40
             for (int i = 0; i < javamethods.length; i++) {
 213  310
                 methods.put(javamethods[i].getName(), javamethods[i]);
 214   
             }
 215  40
             writeReturnTypes(methods, op);
 216   
             //create method param parts mappings    
 217  40
             sc.endElement();//service-endpoint-method-mapping
 218   
         }
 219   
     }
 220   
 
 221  11
     public void write() throws GenerationFault {
 222  11
         try {
 223  11
             sc.startElement(new QName(ns, "java-wsdl-mapping"), null);
 224  11
             writePackageMapping();
 225  11
             writeServiceMapping();
 226   
             //port mapping
 227  11
             Port wsdlport = j2eewscontext.getWSDLContext().getTargetPort();
 228  11
             Binding binding = wsdlport.getBinding();
 229  11
             if (binding == null)
 230  0
                 throw new UnrecoverableGenerationFault("no port discription not match with the wsdl file");
 231  11
             sc.startElement(new QName(ns, "service-endpoint-interface-mapping"), null);
 232  11
             sc.startElement(new QName(ns, "service-endpoint-interface"), null);
 233  11
             sc.writeString(emitter.getCls().getName());
 234  11
             sc.endElement();
 235  11
             sc.registerPrefixForURI("ns2", binding.getQName().getNamespaceURI());
 236  11
             sc.startElement(new QName(ns, "wsdl-binding"), null);
 237  11
             sc.writeString("ns2:" + binding.getQName().getLocalPart());
 238  11
             sc.endElement();
 239  11
             QName ptName = binding.getPortType().getQName();
 240  11
             sc.registerPrefixForURI("ns3", ptName.getNamespaceURI());
 241  11
             sc.startElement(new QName(ns, "wsdl-port-type"), null);
 242  11
             sc.writeString("ns3:" + ptName.getLocalPart());
 243  11
             sc.endElement();
 244  11
             writeMethodMapping(binding);
 245  11
             sc.endElement(); //service-endpoint-interface-mapping   
 246  11
             sc.endElement();//java-wsdl-mapping
 247   
         } catch (IOException e) {
 248   
             // TODO Auto-generated catch block
 249  0
             e.printStackTrace();
 250   
         }
 251   
     }
 252   
 
 253   
 }
 254